"""
基础爬虫抽象类
"""
from abc import ABC, abstractmethod
from typing import List, Dict, Any


class BaseScraper(ABC):
    """爬虫基类，定义通用接口"""

    @property
    @abstractmethod
    def base_url(self) -> str:
        """爬虫基础URL"""
        pass

    @property
    @abstractmethod
    def site_name(self) -> str:
        """网站名称"""
        pass

    @abstractmethod
    def search(self, keyword: str) -> List[Dict[str, Any]]:
        """
        搜索小说

        Args:
            keyword: 搜索关键词

        Returns:
            搜索结果列表，每个结果包含 title, author, url, source, intro, cover 等字段
        """
        pass

    @abstractmethod
    def fetch_chapter(self, url: str) -> Dict[str, Any]:
        """
        获取章节列表

        Args:
            url: 小说目录页URL

        Returns:
            包含 title 和 chapters 的字典，chapters为章节列表
        """
        pass

    @abstractmethod
    def fetch_novel_content(self, url: str) -> Dict[str, Any]:
        """
        获取小说内容

        Args:
            url: 小说章节URL

        Returns:
            包含 title 和 content 的字典
        """
        pass
